/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* All rights reserved. This program and the accompanying materials are made available under
* the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html.
*
*/
package gov.redhawk.sca.ui;
import gov.redhawk.model.sca.ScaSimpleProperty;
import gov.redhawk.model.sca.ScaStructSequenceProperty;
import gov.redhawk.model.sca.provider.ScaSimplePropertyItemProvider;
import gov.redhawk.sca.internal.ui.properties.StructFieldPropertyColumnLabelProvider;
import gov.redhawk.sca.internal.ui.properties.StructFieldPropertyEditingSupport;
import gov.redhawk.sca.ui.compatibility.ColumnViewerToolTipSupport;
import gov.redhawk.sca.ui.compatibility.CompatibilityUtil;
import gov.redhawk.sca.ui.properties.ScaPropertiesContentProvider;
import java.util.ArrayList;
import java.util.List;
import mil.jpeojtrs.sca.prf.Enumeration;
import mil.jpeojtrs.sca.prf.Simple;
import mil.jpeojtrs.sca.prf.SimpleSequence;
import mil.jpeojtrs.sca.util.AnyUtils;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
/**
* @since 8.0
*/
public final class ScaComponentFactory {
private ScaComponentFactory() {
}
/**
* @since 9.0
*/
public static TreeViewer createPropertyTable(final Composite parent, final int style, final AdapterFactory adapterFactory) {
if (parent.getLayout() == null) {
parent.setLayout(new FillLayout());
}
return new ScaPropertiesViewer(parent, SWT.None, style | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.SINGLE, adapterFactory).getViewer();
}
/**
* @since 9.0
*/
public static TreeViewer createPropertyTable(final TabbedPropertySheetWidgetFactory widgetFactory, final Composite parent, final int style,
final AdapterFactory adapterFactory) {
ScaPropertiesViewer viewer = new ScaPropertiesViewer(parent, SWT.None, style | widgetFactory.getOrientation() | widgetFactory.getBorderStyle()
| SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.SINGLE, adapterFactory);
widgetFactory.adapt(viewer);
widgetFactory.adapt(viewer.getViewer().getControl(), false, false);
return viewer.getViewer();
}
/**
* @since 9.0
*/
public static TableViewer createStructSequenceTable(final Composite parent, final int style, final AdapterFactory adapterFactory,
final ScaStructSequenceProperty property) {
final TableViewer viewer = new TableViewer(parent, style | SWT.FULL_SELECTION);
ColumnViewerToolTipSupport.enableFor(viewer);
final TableColumnLayout layout = new TableColumnLayout();
parent.setLayout(layout);
final ScaPropertiesContentProvider contentProvider = new ScaPropertiesContentProvider(adapterFactory);
if (property.getDefinition() != null) {
for (final Simple propDef : property.getDefinition().getStruct().getSimple()) {
final TableViewerColumn columnViewer = new TableViewerColumn(viewer, SWT.CENTER);
columnViewer.setEditingSupport(new StructFieldPropertyEditingSupport(viewer, contentProvider, propDef.getId()));
columnViewer.setLabelProvider(new StructFieldPropertyColumnLabelProvider(contentProvider, propDef.getId()));
String label;
if (propDef.getName() != null) {
label = propDef.getName();
} else {
label = propDef.getId();
}
layout.setColumnData(columnViewer.getColumn(), new ColumnPixelData(Math.min(300, 8 * label.length() + 10), true));
columnViewer.getColumn().setText(label);
}
for (final SimpleSequence propDef : property.getDefinition().getStruct().getSimpleSequence()) {
final TableViewerColumn columnViewer = new TableViewerColumn(viewer, SWT.CENTER);
columnViewer.setEditingSupport(new StructFieldPropertyEditingSupport(viewer, contentProvider, propDef.getId(), true));
columnViewer.setLabelProvider(new StructFieldPropertyColumnLabelProvider(contentProvider, propDef.getId(), true));
String label;
if (propDef.getName() != null) {
label = propDef.getName();
} else {
label = propDef.getId();
}
layout.setColumnData(columnViewer.getColumn(), new ColumnPixelData(Math.min(300, 8 * label.length() + 10), true));
columnViewer.getColumn().setText(label);
}
}
viewer.getTable().setHeaderVisible(true);
viewer.getTable().setLinesVisible(true);
viewer.setContentProvider(contentProvider);
viewer.setInput(property);
return viewer;
}
/**
* @since 9.0
*/
public static Viewer createEnumPropertyViewer(final Composite parent, final int style, final ScaSimpleProperty prop) {
if (prop.getDefinition() != null && prop.getDefinition().getEnumerations() != null) {
final ComboViewer viewer = new ComboViewer(parent, style);
CompatibilityUtil.disableComboWheelScrollSelect(viewer);
viewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(final Object element) {
return ScaSimplePropertyItemProvider.getValueText(prop, element);
}
});
viewer.setContentProvider(new ArrayContentProvider());
final List<Object> values = new ArrayList<Object>();
for (final Enumeration e : prop.getDefinition().getEnumerations().getEnumeration()) {
values.add(AnyUtils.convertString(e.getValue(), prop.getDefinition().getType().getLiteral(), prop.getDefinition().isComplex()));
}
viewer.setInput(values);
return viewer;
}
return null;
}
}